package _06PrototypeDesignPattern;

import _03AbstractorDesignPattern.SouthApple;

public class ShallowClone {
    public static void main(String[] args) {
        //栈和堆的区别在 借鉴与https://www.cnblogs.com/ibelieve618/p/6380328.html
        ShallowAddress address=new ShallowAddress("address",88);
        ShallowPerson shallowPerson1=new ShallowPerson(25,"jim","15",address);
        ShallowPerson shallowPerson2=shallowPerson1.clone();
        System.out.println("两个对象的地址是否一样");
        System.out.println(shallowPerson1==shallowPerson2);
        System.out.println("首先地址不一样");
        shallowPerson1.setId(52);
        System.out.println(shallowPerson1);
        System.out.println(shallowPerson2);
        System.out.println("改掉基本的数据类型，两者不会有太大的关联");
        System.out.println("#######################################");
        System.out.println("但是改掉引用类型之后，结果就会不一样了哦");
        shallowPerson1.getAddress().setAdd("更改address");
        System.out.println(shallowPerson1);
        System.out.println(shallowPerson2);
        /**
         * 综上所述
         * 对于浅度克隆来说
         * 当一个对象更改基本数据类型不知，另一个对象不会变，
         * 但是当更改了引用类型之后那么，两个对象的引用类型都会发生变化
         *Java中分为基本数据类型和引用数据类型，对于不同的数据类型在内存中的存储的区域是不同的。
         * 基本数据类型存储在栈中，引用数据类型存储在堆中。
         */

        /**
         * 浅度克隆，克隆出来的对象会影响原来的对象的属性和值
         * 而深度克隆，克隆出来的相当于一个全新的对象了，两者互不相干
         */
    }

}
